﻿using BLL.Base;
using Entity;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CommandService;
using System.Data;
using Tools;

namespace BLL.ERPAPI
{
    public class U8_13
    {
        HttpAgreement http;
        ReturnResult rsl;
        Commands cmd;
        SysFrameWork.LoginInfo userLogin;
        TxtLogHelper txt;
        PubMethod pub;

        public U8_13()
        {
            http = new HttpAgreement();
            cmd = new Commands();
            userLogin = new SysFrameWork.LoginInfo();
            txt = new TxtLogHelper();
            pub = new PubMethod();

        }
        /// <summary>
        /// 产成品入库
        /// </summary>
        /// <returns></returns>
        public ReturnResult ProductIn(string datas)
        {
            rsl = new ReturnResult();
            try
            {
                var msg = http.PostJson("接口地址", "数据源");
                if (!string.IsNullOrWhiteSpace(msg))
                {
                    var obj = JsonConvert.DeserializeObject<JObject>(msg);
                    if (obj["result"].ToString() == "true")
                    {
                        rsl.Result = true;
                    }
                    else
                    {
                        rsl.Message = obj["Messgae"].ToString();
                    }
                }
            }
            catch (Exception ex)
            {
                rsl.Message = ex.Message;
            }
            return rsl;
        }
        /// <summary>
        /// 材料出库
        /// </summary>
        /// <param name="datas"></param>
        /// <returns></returns>
        public ReturnResult MaterialOut(DataTable datas)
        {
            rsl = new ReturnResult();
            try
            {
                var pars = new Dictionary<string, object>();
                string msg = "";
                var sysPar = this.createUserPar(userLogin.UserInfo().userCode, userLogin.UserInfo().baseCode, ref msg);
                if (!string.IsNullOrWhiteSpace(msg))
                {
                    rsl.Message = msg;
                    return rsl;
                }
                #region 构建参数
                pars["System"] = sysPar;
                #region 表头参数
                var head = new Dictionary<string, object>();
                head["ccode"] = DateTime.Now.ToString("yyMMddHHmmssfff");//单据号
                head["cwhcode"] = datas.Rows[0]["wareCode"];//发生仓库
                head["ddate"] = DateTime.Now.ToString("yyyy-MM-dd"); //日期
                head["vt_id"] = "65";
                head["cmaker"] = userLogin.UserInfo().userName;//制单人
                head["cbustype"] = "领料";//发生类型
                pars["Head"] = head;
                #endregion

                #region 表体数据
                var cList = new List<Dictionary<string, object>>();
                var rowno = 1;
                for (int i = 0; i < datas.Rows.Count; i++)
                {
                    var ldic = new Dictionary<string, object>();
                    ldic["irowno"] = rowno;//行号
                    ldic["cinvcode"] = datas.Rows[i]["proCode"]; //存货编码，string类型
                    ldic["iquantity"] = datas.Rows[i]["number"]; //数量，double类型
                    //ldic["cfree1"] = "红色";//颜色  
                    //ldic["cfree2"] = "1号";//锅号
                    //ldic["cfree3"] = "2";//商标
                    //ldic["cfree4"] = "装箱";//存放方式
                    cList.Add(ldic);
                    rowno++;
                }
                pars["List"] = cList;
                #endregion
                pars["isBlue"] = "1";//红蓝单
                #endregion

                string url = string.Format("{0}{1}", Tools.ConfigReader.Reader["APIUrl"], "MaterialOut");
                var postData = JsonConvert.SerializeObject(pars);
                msg = http.PostJson(url, postData);
                if (!string.IsNullOrWhiteSpace(msg))
                {
                    var obj = JsonConvert.DeserializeObject<JObject>(msg);
                    if (obj["Result"].ToString().Equals("True"))
                    {
                        rsl.Result = true;
                        rsl.Data = obj["Data"].ToString();
                    }
                    else
                    {
                        rsl.Message = obj["Message"].ToString();
                    }
                }
            }
            catch (Exception ex)
            {
                rsl.Message = ex.Message;
            }
            return rsl;
        }

        /// <summary>
        /// 销售发票
        /// </summary>
        /// <param name="datas"></param>
        /// <returns></returns>
        public ReturnResult SaleBillVouch(DataTable datas)
        {
            rsl = new ReturnResult();
            try
            {
                var pars = new Dictionary<string, object>();
                string msg = "";
                var sysPar = this.createUserPar(userLogin.UserInfo().userCode, userLogin.UserInfo().baseCode, ref msg);
                if (!string.IsNullOrWhiteSpace(msg))
                {
                    rsl.Message = msg;
                    return rsl;
                }

                #region 构建参数
                pars["System"] = sysPar;
                #region 表头参数
                var head = new Dictionary<string, object>();
                head["csocode"] = datas.Rows[0]["orderCode"];//销售订单号
                head["ccuscode"] = datas.Rows[0]["cuCode"];//客户编码
                head["ccusname"] = datas.Rows[0]["cuName"];//客户名称
                head["cmaker"] = userLogin.UserInfo().userName;//制单人
                pars["Head"] = head;
                #endregion

                #region 表体数据
                var cList = new List<Dictionary<string, object>>();
                var rowno = 1;
                for (int i = 0; i < datas.Rows.Count; i++)
                {
                    var ldic = new Dictionary<string, object>();
                    ldic["irowno"] = rowno;//行号
                    ldic["cinvcode"] = datas.Rows[i]["proCode"]; //存货编码，string类型
                    ldic["cinvname"] = datas.Rows[i]["proName"]; //存货名称
                    ldic["iquantity"] = datas.Rows[i]["use"]; //数量，double类型
                    ldic["cfree1"] = datas.Rows[i]["cu_yanse"]; //颜色  
                    ldic["cfree3"] = datas.Rows[i]["cu_shangbiao"]; //商标  
                    ldic["cwhcode"] = datas.Rows[i]["cwhCode"]; //仓库  
                    ldic["cposition"] = datas.Rows[i]["cPosition"]; //仓库  
                    ldic["isosid"] = datas.Rows[i]["iSOsID"]; //销售订单子表id  
                    cList.Add(ldic);
                    rowno++;
                }
                pars["List"] = cList;
                #endregion

                if (decimal.Parse(datas.Rows[0]["use"].ToString()) >= 0)
                {
                    pars["isBlue"] = "1";//红蓝单
                }
                else
                {
                    pars["isBlue"] = "0";//红蓝单
                }
                
                #endregion

                string url = string.Format("{0}{1}", Tools.ConfigReader.Reader["APIUrl"], "SaleBillVouch");
                var postData = JsonConvert.SerializeObject(pars);
                msg = http.PostJson(url, postData);
                #region 返回结果
                if (!string.IsNullOrWhiteSpace(msg))
                {
                    var obj = JsonConvert.DeserializeObject<JObject>(msg);
                    if (obj["Result"].ToString().Equals("True"))
                    {
                        rsl.Result = true;
                        rsl.Data = obj["Data"].ToString();
                    }
                    else
                    {
                        rsl.Message = obj["Message"].ToString();
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                rsl.Message = ex.Message;
            }
            return rsl;
        }

        /// <summary>
        /// 调拨
        /// 备料、次品调拨任务使用
        /// </summary>
        /// <param name="datas"></param>
        /// <returns></returns>
        public ReturnResult TransVouchDirect(DataTable datas, List<string> outware, string inware, string inType, string outType,string auto=null)
        {
            rsl = new ReturnResult();
            string postData = "";
            try
            {
                string url = string.Format("{0}{1}", Tools.ConfigReader.Reader["APIUrl"], "TransVouchDirect");
                //string url = string.Format("{0}{1}", Tools.ConfigReader.Reader["APIUrl"], "TransVouch");
                var pars= new Dictionary<string, object>();
                string msg = ""; var data = "";
                Dictionary<string, object> sysPar = new Dictionary<string, object>();
                if (string.IsNullOrEmpty(auto))
                {
                    sysPar = this.createUserPar(userLogin.UserInfo().userCode, userLogin.UserInfo().baseCode, ref msg);
                }
                else
                {
                    SysFrameWork.SystemBLL sysBLL = new SysFrameWork.SystemBLL();
                    string baseCode = sysBLL.getDefaultBaseCode();
                    sysPar = this.createUserPar("admin", baseCode, ref msg);
                }
                if (!string.IsNullOrWhiteSpace(msg))
                {
                    rsl.Message = msg;
                    return rsl;
                }
                for (int i = 0; i < outware.Count; i++)
                {
                    var drs = datas.Select("wareCode='" + outware[i] + "'");
                    #region 构建参数
                    pars = new Dictionary<string, object>();
                    pars["System"] = sysPar;
                    #region 表头参数
                    var head = new Dictionary<string, object>();
                    //head["ctvcode"] = pub.getTimeString();
                    head["dtvdate"] = DateTime.Now.ToString("yyyy-MM-dd");//日期
                    head["cowhcode"] = outware[i];//调出仓库
                    head["ciwhcode"] = inware;//调入仓库
                    //备料的不需要传入出入库类型
                    //head["cirdcode"] = inType;//入库类别
                    //head["cordcode"] = outType;//出库类别
                    //head["cMaker"] = userLogin.UserInfo().userName;//制单人
                    head["cmaker"] = sysPar["sUserName"];//制单人
                    //head["cverifyperson"] = sysPar["sUserName"];//制单人
                    //head["dverifydate"] = DateTime.Now.ToString("yyyy-MM-dd");//制单人
                    if (!string.IsNullOrWhiteSpace(auto))
                    {
                        head["ctvmemo"] = "";
                    }
                    else
                    {
                        head["ctvmemo"] = drs[0]["plCode"].ToString();//锅号(生产订单号) 

                    }
                    head["vt_id"] = "131379";
                    pars["Head"] = head;
                    #endregion

                    #region 表体数据
                    var cList = new List<Dictionary<string, object>>();
                    var rowno = 1;
                    
                    for (int j = 0; j < drs.Length; j++)
                    {
                        var ldic = new Dictionary<string, object>();
                        //ldic["ctvcode"] = pub.getTimeString();
                        ldic["irowno"] = rowno;//行号
                        ldic["coutposcode"] = drs[j]["positionCode"];//调出货位
                        ldic["cinposcode"] = "";//调入货位 （整理车间库无货位）
                        ldic["cinvcode"] = drs[j]["proCode"]; //存货编码，string类型
                        //ldic["itvnum"] = ""; //存货编码，string类型
                        ldic["itvquantity"] = drs[j]["number"]; //数量，double类型
                        ldic["cfree1"] = drs[j]["color"];//颜色  
                        //ldic["cfree2"] = "";//锅号
                        ldic["cfree3"] = drs[j]["shangbiao"];//商标
                        //ldic["cfree4"] = "";//存放方式
                        cList.Add(ldic);
                        rowno++;
                    }
                    pars["List"] = cList;
                    #endregion
                    pars["isBlue"] = "1";//红蓝单
                    #endregion
                    #region  接口
                    //postData = postData + JsonConvert.SerializeObject(pars) + ",";
                    postData = JsonConvert.SerializeObject(pars);
                    msg = http.PostJson(url, postData);
                    
                    txt.AddLogMsg("备料调拨传输信息：" + postData + "返回信息：" + msg);
                    if (!string.IsNullOrWhiteSpace(msg))
                    {
                        var obj = JsonConvert.DeserializeObject<JObject>(msg);
                        if (obj["Result"].ToString().Equals("True"))
                        {
                            data = data+obj["Data"].ToString()+",";
                        }
                        else
                        {
                            rsl.Message = obj["Message"].ToString();
                            return rsl;
                        }
                    }
                    #endregion
                }
                rsl.Result = true;
                rsl.Data = data.TrimEnd(',');
            }
            catch (Exception ex)
            {
                rsl.Message = ex.Message;
            }
            return rsl;
        }

        /// <summary>
        /// 退料（反向调拨）   数据，目标仓库，发生仓库
        /// </summary>
        /// <param name="datas"></param>
        /// <returns></returns>
        public ReturnResult TransVouchDirectTL(DataTable datas, List<string> inware, string outware, string inType, string outType)
        {
            rsl = new ReturnResult();
            string postData = "";
            try
            {
                string url = string.Format("{0}{1}", Tools.ConfigReader.Reader["APIUrl"], "TransVouchDirect");
                //string url = string.Format("{0}{1}", Tools.ConfigReader.Reader["APIUrl"], "TransVouch");
                var pars = new Dictionary<string, object>();
                string msg = ""; var data = "";
                var sysPar = this.createUserPar(userLogin.UserInfo().userCode, userLogin.UserInfo().baseCode, ref msg);
                if (!string.IsNullOrWhiteSpace(msg))
                {
                    rsl.Message = msg;
                    return rsl;
                }
                for (int i = 0; i < inware.Count; i++)
                {
                    var drs = datas.Select("wareCode='" + inware[i] + "'");
                    #region 构建参数
                    pars = new Dictionary<string, object>();
                    pars["System"] = sysPar;
                    #region 表头参数
                    var head = new Dictionary<string, object>();
                    //head["ctvcode"] = pub.getTimeString();
                    head["dtvdate"] = DateTime.Now.ToString("yyyy-MM-dd");//日期
                    head["cowhcode"] = outware;//调出仓库
                    head["ciwhcode"] = inware[i];//调入仓库
                    //备料的不需要传入出入库类型
                    //head["cirdcode"] = inType;//入库类别
                    //head["cordcode"] = outType;//出库类别
                    //head["cMaker"] = userLogin.UserInfo().userName;//制单人
                    head["cmaker"] = sysPar["sUserName"];//制单人
                    //head["cverifyperson"] = sysPar["sUserName"];//制单人
                    //head["dverifydate"] = DateTime.Now.ToString("yyyy-MM-dd");//制单人
                    head["vt_id"] = "131379";
                    pars["Head"] = head;
                    #endregion

                    #region 表体数据
                    var cList = new List<Dictionary<string, object>>();
                    var rowno = 1;
                    
                    for (int j = 0; j < drs.Length; j++)
                    {
                        var ldic = new Dictionary<string, object>();
                        //ldic["ctvcode"] = pub.getTimeString();
                        ldic["irowno"] = rowno;//行号
                        ldic["cinvcode"] = datas.Rows[j]["proCode"]; //存货编码，string类型
                        ldic["coutposcode"] = "";//调出货位（整理车间库无货位）
                        ldic["cinposcode"] = drs[j]["positionCode"];//调入货位 
                        //ldic["itvnum"] = ""; //存货编码，string类型
                        ldic["itvquantity"] = datas.Rows[j]["number"]; //数量，double类型
                        ldic["cfree1"] = drs[j]["yanse"];//颜色  
                        //ldic["cfree2"] = "";//锅号
                        ldic["cfree3"] = drs[j]["shangbiao"];//商标
                        //ldic["cfree4"] = "";//存放方式
                        //if (datas.Columns.Contains("positionCode") && !string.IsNullOrWhiteSpace(datas.Rows[0]["positionCode"].ToString()))
                        //{
                        //    ldic["cinposcode "] = drs[j]["positionCode"]; //调入货位，double类型
                        //}
                        cList.Add(ldic);
                        rowno++;
                    }
                    pars["List"] = cList;
                    #endregion
                    pars["isBlue"] = "1";//红蓝单
                    #endregion
                    #region  接口
                    //postData = postData + JsonConvert.SerializeObject(pars) + ",";
                    postData = JsonConvert.SerializeObject(pars);
                    msg = http.PostJson(url, postData);
                    txt.AddLogMsg("退料调拨传输信息：" + postData + "返回信息：" + msg);
                    if (!string.IsNullOrWhiteSpace(msg))
                    {
                        var obj = JsonConvert.DeserializeObject<JObject>(msg);
                        if (obj["Result"].ToString().Equals("True"))
                        {
                            data = data + obj["Data"].ToString() + ",";
                        }
                        else
                        {
                            rsl.Message = obj["Message"].ToString();
                            return rsl;
                        }
                    }
                    #endregion
                }
                rsl.Result = true;
                rsl.Data = data.TrimEnd(',');
            }
            catch (Exception ex)
            {
                rsl.Message = ex.Message;
            }
            return rsl;
        }

        /// <summary>
        /// 其他出库
        /// </summary>
        /// <param name="datas"></param>
        /// <returns></returns>
        public ReturnResult OtherOut(DataTable datas, List<string> wareCode, string type)
        {
            rsl = new ReturnResult();
            string postData = "";
            try
            {
                string url = string.Format("{0}{1}", Tools.ConfigReader.Reader["APIUrl"], "OtherOut");
                var pars = new Dictionary<string, object>();
                string msg = ""; var data = "";
                var sysPar = this.createUserPar(userLogin.UserInfo().userCode, userLogin.UserInfo().baseCode, ref msg);
                if (!string.IsNullOrWhiteSpace(msg))
                {
                    rsl.Message = msg;
                    return rsl;
                }
                for (int i = 0; i < wareCode.Count; i++)
                {
                    var drs = datas.Select("wareCode='" + wareCode[i] + "'");
                    #region 构建参数
                    pars = new Dictionary<string, object>();
                    pars["System"] = sysPar;
                    #region 表头参数
                    var head = new Dictionary<string, object>();
                    head["ddate"] = DateTime.Now.ToString("yyyy-MM-dd");//日期
                    head["cwhcode"] = wareCode[i];//出库仓库
                    head["crdcode"] = "299";//收发类别编码 
                    head["cbustype"] = "其他出库";//业务类型
                    head["cmaker"] = sysPar["sUserName"];//制单人
                    head["brdflag"] = "0";//收发类别
                    head["cvouchtype"] = "09";//
                    head["csource"] = "库存";//
                    //head["cmemo"] = "";
                    head["vt_id"] = "131389";
                    pars["Head"] = head;
                    #endregion

                    #region 表体数据
                    var cList = new List<Dictionary<string, object>>();
                    var rowno = 1;

                    for (int j = 0; j < drs.Length; j++)
                    {
                        var ldic = new Dictionary<string, object>();
                        //ldic["ctvcode"] = pub.getTimeString();
                        ldic["irowno"] = rowno;//行号
                        ldic["cposition"] = drs[j]["positionCode"];//调出货位
                        if (!string.IsNullOrWhiteSpace(drs[j]["positionCode"].ToString()))
                        {
                            ldic["iposflag"] = "1";//是否指定货位
                        }
                        else
                        {
                            ldic["iposflag"] = "0";//是否指定货位
                        }
                        ldic["cinvcode"] = drs[j]["proCode"]; //存货编码，string类型
                        ldic["iquantity"] = drs[j]["number"]; //数量，double类型
                        ldic["cfree1"] = drs[j]["color"];//颜色  
                        ldic["cfree3"] = drs[j]["shangbiao"];//商标
                        cList.Add(ldic);
                        rowno++;
                    }
                    pars["List"] = cList;
                    #endregion
                    pars["isBlue"] = "1";//红蓝单
                    #endregion
                    #region  接口
                    //postData = postData + JsonConvert.SerializeObject(pars) + ",";
                    postData = JsonConvert.SerializeObject(pars);
                    msg = http.PostJson(url, postData);
                    txt.AddLogMsg("其他出库传输信息：" + postData + "返回信息：" + msg);
                    if (!string.IsNullOrWhiteSpace(msg))
                    {
                        var obj = JsonConvert.DeserializeObject<JObject>(msg);
                        if (obj["Result"].ToString().Equals("True"))
                        {
                            data = data + obj["Data"].ToString() + ",";
                        }
                        else
                        {
                            rsl.Message = obj["Message"].ToString();
                            return rsl;
                        }
                    }
                    #endregion
                }
                rsl.Result = true;
                rsl.Data = data.TrimEnd(',');
            }
            catch (Exception ex)
            {
                rsl.Message = ex.Message;
            }
            return rsl;
        }

        /// <summary>
        /// 其他入库
        /// </summary>
        /// <param name="datas"></param>
        /// <returns></returns>
        public ReturnResult OtherIn(DataTable datas, string wareCode, string type)
        {
            rsl = new ReturnResult();
            string postData = "";
            try
            {
                string url = string.Format("{0}{1}", Tools.ConfigReader.Reader["APIUrl"], "OtherIn");
                var pars = new Dictionary<string, object>();
                string msg = ""; var data = "";
                var sysPar = this.createUserPar(userLogin.UserInfo().userCode, userLogin.UserInfo().baseCode, ref msg);
                if (!string.IsNullOrWhiteSpace(msg))
                {
                    rsl.Message = msg;
                    return rsl;
                }
                
                #region 构建参数
                pars = new Dictionary<string, object>();
                pars["System"] = sysPar;
                #region 表头参数
                var head = new Dictionary<string, object>();
                head["ddate"] = DateTime.Now.ToString("yyyy-MM-dd");//日期
                head["cwhcode"] = wareCode;//入库仓库
                head["crdcode"] = "199";//收发类别编码 
                head["cbustype"] = "其他入库";//业务类型
                head["cmaker"] = sysPar["sUserName"];//制单人
                head["brdflag"] = "1";//收发类别
                head["cvouchtype"] = "08";//
                head["csource"] = "库存";//
                //head["cmemo"] = "";
                head["vt_id"] = "131381";
                pars["Head"] = head;
                #endregion

                #region 表体数据
                var cList = new List<Dictionary<string, object>>();
                var rowno = 1;

                for (int j = 0; j < datas.Rows.Count; j++)
                {
                    var ldic = new Dictionary<string, object>();
                    //ldic["ctvcode"] = pub.getTimeString();
                    ldic["irowno"] = rowno;//行号
                    //ldic["cposition"] = datas.Rows[j]["positionCode"];//调入货位
                    //（因为只是暂存，后续备料完成就做调拨单了，这为省事就选了个没有货位的仓库）
                    //目前调入到011仓库，无货位，所以先不传，是否指定货位也就是默认的0
                    ldic["cinvcode"] = datas.Rows[j]["proCode"]; //存货编码，string类型
                    ldic["iquantity"] = datas.Rows[j]["number"]; //数量，double类型
                    ldic["cfree1"] = datas.Rows[j]["cu_yanse"];//颜色  
                    ldic["cfree3"] = datas.Rows[j]["cu_shangbiao"];//商标
                    cList.Add(ldic);
                    rowno++;
                }
                pars["List"] = cList;
                #endregion
                pars["isBlue"] = "1";//红蓝单
                #endregion
                #region  接口
                //postData = postData + JsonConvert.SerializeObject(pars) + ",";
                postData = JsonConvert.SerializeObject(pars);
                msg = http.PostJson(url, postData);
                txt.AddLogMsg("其他入库传输信息：" + postData + "返回信息：" + msg);
                if (!string.IsNullOrWhiteSpace(msg))
                {
                    var obj = JsonConvert.DeserializeObject<JObject>(msg);
                    if (obj["Result"].ToString().Equals("True"))
                    {
                        data = data + obj["Data"].ToString() + ",";
                    }
                    else
                    {
                        rsl.Message = obj["Message"].ToString();
                        return rsl;
                    }
                }
                #endregion
                rsl.Result = true;
                rsl.Data = data.TrimEnd(',');
            }
            catch (Exception ex)
            {
                rsl.Message = ex.Message;
            }
            return rsl;
        }

        /// <summary>
        /// u8接口登录信息参数构建
        /// </summary>
        /// <param name="uTable"></param>
        /// <returns></returns>
        private Dictionary<string, object> createUserPar(string userCode, string baseCode, ref string errMsg)
        {
            StringBuilder sb = new StringBuilder();
            //var sAccID = Tools.ConfigReader.Reader["sAccID"];//账套号
            var sAccID = baseCode;
            var sys = new Dictionary<string, object>();
            sys["sAccID"] = baseCode;
            sys["sYear"] = DateTime.Now.Year;
            sys["sDate"] = DateTime.Now.ToString("yyyy-MM-dd");
            sys["sServer"] = Tools.ConfigReader.Reader["BaseServerIP"];
            if (userCode == "admin")
            {
                sys["sUserID"] = "rh";
                sys["sUserName"] = "李娇";
                sys["sPassword"] = "1234567";
            }
            else
            {
                sb.Append("select * from sys_users_info where userCode='" + userCode + "'");
                sb.Append(" and isSync='Y' and isDel='0' and status='Y' ");
                sb.Append(" and baseCode='" + sAccID + "'");
                var uTable = cmd.GetDataTable(sb.ToString());
                if (uTable.Rows.Count < 1)
                {
                    errMsg = "该账号无权限提交数据";
                    return null;
                }
                sys["sUserID"] = uTable.Rows[0]["userCode"].ToString();
                sys["sUserName"] = uTable.Rows[0]["userName"].ToString();
                sys["sPassword"] = Tools.Encryption.DesDecrypt(uTable.Rows[0]["openPwd"].ToString()); 
            }

            return sys;
        }

    }
}

